import {create} from 'zustand'

/**
 * 商品浏览量状态管理
 * 用于管理用户查看商品后增加的浏览量，实现本地浏览量统计功能
 * 注意：这只是前端显示效果，不会调用后端接口
 */
interface ViewCountStore {
  // 存储已查看商品的ID和增加的浏览量
  // key: 商品ID, value: 增加的浏览量数量
  viewedItems: Record<string, number>

  // 增加商品浏览量
  // @param itemId 商品ID
  incrementViewCount: (itemId: string) => void

  // 获取商品的增加浏览量
  // @param itemId 商品ID
  // @returns 该商品增加的浏览量数量
  getViewCount: (itemId: string) => number

  // 重置所有浏览量
  // 清空所有商品的增加浏览量记录
  resetViewCounts: () => void
}

/**
 * 创建商品浏览量状态管理store
 * 使用zustand进行状态管理，支持跨组件共享状态
 */
export const useViewCountStore = create<ViewCountStore>((set, get) => ({
  // 初始化已查看商品记录为空对象
  viewedItems: {},

  /**
   * 增加商品浏览量
   * 每次调用会将指定商品的浏览量+1
   * @param itemId 商品ID
   */
  incrementViewCount: (itemId: string) => {
    set((state) => ({
      viewedItems: {
        ...state.viewedItems,
        [itemId]: (state.viewedItems[itemId] || 0) + 1
      }
    }))
  },

  /**
   * 获取商品的增加浏览量
   * 如果商品没有被查看过，返回0
   * @param itemId 商品ID
   * @returns 该商品增加的浏览量数量
   */
  getViewCount: (itemId: string) => {
    return get().viewedItems[itemId] || 0
  },

  /**
   * 重置所有浏览量
   * 清空所有商品的增加浏览量记录，恢复到初始状态
   */
  resetViewCounts: () => {
    set({viewedItems: {}})
  }
}))
